export default {
  namespaced: true,
  state: {
    // 是否为编辑状态
    isEditStatus: false,
    // 是否显示频道编辑弹出层
    isShowChannelEditPopup: false,
    // 当前激活的频道id
    activeChannelId: 0,
    // 当前登录用户的频道列表
    curUserChannels: [],
    // 所有频道列表
    allChannels: [],
  },
  getters: {
    // 推荐频道列表
    recommendChannels(state) {
      // 从所有频道中 过滤出 不在 我的频道列表中的 频道
      return state.allChannels.filter(v => {
        // 要看这个 v 在不在 我的频道列表中（根据id），如果在，就不要，如果不在，就要
        return !state.curUserChannels.some(v2 => v2.id === v.id)
        // 数组的 filter 函数的过滤逻辑是看回调函数的返回值，如果返回为 true，就放到新数组中，如果为 false 就不要
      })
    },
  },
  mutations: {
    delCurUserChannelById(state, payload) {
      // const i = state.curUserChannels.findIndex(v => v.id === payload)
      // state.curUserChannels.splice(i, 1)
      state.curUserChannels = state.curUserChannels.filter(
        v => v.id !== payload
      )
    },
    // 来回切换编辑状态
    toggleEditStatus(state) {
      state.isEditStatus = !state.isEditStatus
    },
    changeIsEditStatus(state, payload) {
      state.isEditStatus = payload
    },
    // 打开编辑频道弹出层
    openChannelEditPopup(state) {
      state.isShowChannelEditPopup = true
    },
    // 关闭编辑频道弹出层
    closeChannelEditPopup(state) {
      state.isShowChannelEditPopup = false
    },
    changeIsShowChannelEditPopup(state, payload) {
      state.isShowChannelEditPopup = payload
    },
    changeAllChannels(state, payload) {
      state.allChannels = payload
    },
    changeActiveChannelId(state, payload) {
      state.activeChannelId = payload
    },
    // 添加频道到我的频道中
    addChannelOfCurUserChannels(state, payload) {
      state.curUserChannels.push(payload)
    },
    changeCurUserChannels(state, payload) {
      state.curUserChannels = payload
    },
  },
  actions: {
    // 加载所有频道列表
    loadAllChannels(ctx) {
      return this._apis.channel.getAllChannels().then(res => {
        ctx.commit('changeAllChannels', res.data.data.channels)
      })
    },
    // 加载当前登录用户的频道列表
    loadCurUserChannels(ctx) {
      return this._apis.channel.getCurUserChannels().then(res => {
        ctx.commit('changeCurUserChannels', res.data.data.channels)
      })
    },
  },
}
